iT邦幫忙

2

【Python】if __name__ == '__main__': 判斷式解析

  • 分享至 

  • xImage
  •  

在python程式碼有時會看到if name == 'main': 的判斷式,其用途是判斷目前所執行的python檔案是以主程式或以模組的方式執行。

先建立一名為mod1.py的檔案

def module_name_show():
    print('mod1.py 的__name__名稱為:', __name__)

if __name__ == '__main__':
    print('mod1.py 以主程式方式執行')
    module_name_show()
else:
    print('mod1.py 以模組方式執行')

程式執行結果:

說明:

  1. 當直接執行程式時,列印出"mod1.py 以主程式方式執行",故得知其__name__的名稱為__main__才會執行if條件成立的敘述。

  2. 然後再呼叫函式module_name_show()列印__name__名稱。

接下來再建立一名為mod1_main.py的檔案。

import mod1

if __name__ == '__main__':
    print('mod1_main.py的__name__名稱為:',__name__)
    mod1.module_name_show()

執行該mod1_main.py程式,結果如下:

由執行結果可得知:

  1. import模組時,會先執行模組內的if判斷敘述。而所列印的結果得知,是else區段,故可知其__name__名稱不是__main__。

  2. 當import完後,才會執行主程式的if判斷敘述。列印出所執行程式的__name__名稱。列印出來為__main__。

  3. 接下來再呼叫mod1模組內的module_name_show()函式。而此時其函式所列印的__name__名稱為mod1,也就是模組(檔名)名稱。

結論,由以上程式的示範可得知:

  1. 當直接執行該檔案時,其__name__名稱為: __main__。
  2. 當該檔案被另一個檔案當模組import時,其__name__名稱為該模組(檔名)名稱。

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
meebox
iT邦新手 3 級 ‧ 2024-03-18 10:05:14

這是回覆你貼文看不到 main 前後兩個底線字元的問題。這是因為採用 markdown 語法, 用一對底線字元夾內容, 像是這樣 _斜體_ 是 斜體 的意思, 如果要顯示底線字元, 要在底線字元前面加上斜線取消底線表示斜體的功能, 像是這樣 \_不會斜體\_, 就會變成 _不會斜體_, 連續兩個底線字元剛好表示一個什麼內容都沒有的斜體格式, 所以會把底線字元都用掉, 顯示時就什麼都看不到了。你要用 \_\_main\_\_ 才會顯示 __main__

看更多先前的回應...收起先前的回應...

謝謝您的回覆。但很奇怪的是,整篇文章只有這段出問題。其它有關底線的地方都正常。不知是何原因!?由於文章是我從自己的Blogger貼過來的,不知是否因這影響。

meebox iT邦新手 3 級 ‧ 2024-03-20 09:08:42 檢舉

如果是程式碼區塊, 區塊內所有的格式都不會生效, 所以不會有問題。

但奇怪的是,文章中非程式碼區塊,只有在結論這一段的__main__出問題。其他區段的文字(非程式碼)並沒用跳脫字元來標示底線也能正常顯示。

meebox iT邦新手 3 級 ‧ 2024-04-01 11:46:05 檢舉

這個可能要看你原始貼文內容才知道細節, 不然只能看到顯示的結果, 無法判斷原因。

這篇文章就不研究了。之後新post的文章就照markdown定義去撰寫。感謝您多次的回覆。

我要留言

立即登入留言